<?php

class Empresas_model extends CI_Model {

    function __construct() {
        parent::__construct();
    }

    public $emailContenido;
    public $emailInsti;

    public function consOfertas() {
        $sql = "select * from ofertaslaborales where empresaId = '{$this->session->userdata("tablaUsuarioId")}' and ofertaLaboralEstado = 'A' order by ofertaLaboralCargo";
        return $this->db->query($sql);
    }

    public function conServAse($empresaId) {
        $sql = "select * from solservyase where empresaId = '$empresaId' and solServyAseEstado = 'A' order by solServyAseTipo,solServyAseNombre";
        return $this->db->query($sql);
    }

    public function obtieneUsuario($rol, $oferta) {
        if ($rol == "3") { //es una institucion
            $sql = "select usr.usuarioId from postulaciones postu inner join instituciones insti on insti.institucionId = postu.institucionId inner join usuarios usr on usr.usuarioId = insti.usuarioId where postu.postulacionesId = '$oferta'";
        }
        if ($rol == "4") { //es una persona
            $sql = "select usr.usuarioId from postulaciones postu inner join personas perso on perso.personasId = postu.personasId inner join usuarios usr on usr.usuarioId = perso.usuarioId where postu.postulacionesId = '$oferta'";
        }
        $obj = $this->db->query($sql)->result();
        return $obj[0]->usuarioId;
    }

    public function cerrarOferta($empresaId, $oferta, $cauaNo, $motivoCierre, $total) {
        /* Cierra las ofertas laborales y crea la contratacion de todas las personas que han sido preseleccionadas */
        $this->db->trans_start(); //inicia la transaccion
        if ($total > 0) { //existen postulados que no fueron seleccionados, se actualiza el estado del por que no fueron seleccionados y despues se cierra la ofer talaboral
            $sql = "update postulaciones postu inner join ofertaslaborales ofer on ofer.ofertaLaboralId = postu.ofertaLaboralId set postu.postulacionMotivoNO = '$cauaNo', postu.postulacionFechaPreseleccion = now(), postu.postulacionEstado = 'R' where postu.postulacionEstado = 'A' and postu.postulacionPreseleccion = 'No' and postu.ofertaLaboralId = '$oferta'";
            $this->db->query($sql);
        }
        //recorre todos los preseleccionados para crear el contrato y la experiencia laboral
        $sql = "select postu.`postulacionesId`,postu.`personasId`,ofer.`ofertaLaboralDescripcion` from postulaciones postu
                inner join ofertaslaborales ofer on ofer.`ofertaLaboralId` = postu.`ofertaLaboralId`
                where postu.ofertaLaboralId = '$oferta' and postu.postulacionPreseleccion = 'Si' and postu.postulacionEstado = 'A'";
        $preseleccionados = $this->db->query($sql);
        //Pongo en contexto la informacion de la empresa
        $sql = "select `empresaRazon`,`empresaContacto`,`empresaTelefono1` from empresas where `empresaId` = '$empresaId'";
        $empresa = $this->db->query($sql)->result();
        foreach ($preseleccionados->result() as $preseleccionado) {
            //crea el contrato
            $sql = "insert into contratos(contratoFecha,postulacionesId) values (now(),'{$preseleccionado->postulacionesId}')";
            $this->db->query($sql);
            $contratoId = $this->db->insert_id();
            //Crea la experiencia laboral
            $sql = "insert into explaboral(`expLaboralEmpresa`,`expLaboralContacto`,`expLaboralTelefono`,`expLaboralInicio`,`expLaboralFunciones`,`expLaboralActual`,`personasId`,contratoId) values(";
            $sql .= "'{$empresa[0]->empresaRazon}','{$empresa[0]->empresaContacto}','{$empresa[0]->empresaTelefono1}',now(),'{$preseleccionado->ofertaLaboralDescripcion}','Si','{$preseleccionado->personasId}','$contratoId')";
            $this->db->query($sql);
        }
        //Deja vigente la postulacion de las personas contratadas
        $sql = "update postulaciones set postulacionEstado = 'V' where ofertaLaboralId = '$oferta' and postulacionPreseleccion = 'Si' and postulacionEstado = 'A'";
        $this->db->query($sql);
        /* Verifica que si hay instituciones preseleccionas valida si existio postulaciones de la institucion o no para cambiar el estado de la preseleccion si fue retirada o contratada */
        $sql = "select `institucionId` from postulaciones where `ofertaLaboralId` = '$oferta' and `institucionId` is not null group by  institucionId";
        $instOfer = $this->db->query($sql);
        if ($instOfer->num_rows() > 0) {
            //Evalua por cada institucion postulada si preselecciono o no personal
            foreach ($instOfer->result() as $instiOfer) {
                $sql = "select count(`postulacionesId`) as total from postulaciones where `ofertaLaboralId` = '$oferta' and `institucionId` = '{$instiOfer->institucionId}' and `postulacionPreseleccion` = 'Si'";
                $totPreOfer = $this->db->query($sql)->result();
                if ($totPreOfer[0]->total > 0) { //si existio preseleccion por lo tanto existio contratacion
                    $sql = "update preseleccioninstituciones set `preseInstEstado` = 'C' where `institucionId` = '{$instiOfer->institucionId}' and `ofertaLaboralId` = '$oferta' ";
                } else {
                    $sql = "update preseleccioninstituciones set `preseInstEstado` = 'R',`preseCausaNo` = 'No preselecciono' where `institucionId` = '{$instiOfer->institucionId}' and `ofertaLaboralId` = '$oferta' ";
                }
                $this->db->query($sql);
            }//fin foreach($instOfer->result() as $instiOfer){
        }
        //Cierra la oferta laboral
        $sql = "update ofertaslaborales set ofertaLaboralEstado = 'C',ofertaLaboralFechaCierre = now(),ofertaLaboralCausaCierre = '$motivoCierre' where ofertaLaboralId = '$oferta'";
        $this->db->query($sql);
        $this->db->trans_complete();
        return "1";
    }

//fin public function cerrarOferta() {

    public function cerrarSolServ() {
        $this->db->trans_start(); //inicia la transaccion
        if ($this->input->GET("total") > 0) { //existen postulados que no fueron seleccionados, se actualiza el estado del por que no fueron seleccionados y despues se cierra la ofer talaboral
            $sql = "update postulaciones postu inner join solservyase sol on sol.solServyAseId = postu.solServyAseId set postu.postulacionMotivoNO = '{$this->input->GET("causaNoContrato")}', postu.postulacionFechaPreseleccion = now(), postu.postulacionEstado = 'R' where postu.postulacionEstado = 'A' and postu.postulacionPreseleccion = 'No' and postu.solServyAseId = '{$this->input->GET("soli")}'";
            $this->db->query($sql);
        }
        //crea los contratos para los que si fueron contratados
        $sql = "insert into contratos(contratoFecha,postulacionesId) select now(),postulacionesId from postulaciones where solServyAseId = '{$this->input->GET("soli")}' and postulacionPreseleccion = 'Si' and postulacionEstado = 'A'";
        $this->db->query($sql);
        //Deja vigente la postulacion de las personas contratadas
        $sql = "update postulaciones set postulacionEstado = 'V' where solServyAseId = '{$this->input->GET("soli")}' and postulacionPreseleccion = 'Si' and postulacionEstado = 'A'";
        $this->db->query($sql);
        //Cierra la solicitud de Servicios
        $sql = "update solservyase set solServyAseEstado = 'C',solServyAseFechaCierre = now(),solServyAseCausaCierre = '{$this->input->GET("motivoCierre")}' where solServyAseId = '{$this->input->GET("soli")}'";
        $this->db->query($sql);
        $this->db->trans_complete();
        return "1";
    }

    public function seleccionar($oferta, $postulados, $transaccion = null) {
        /* Selecciona una persona o institucion para la oferta laboral */
        $this->db->trans_start(); //inicia la transaccion
        foreach ($postulados as $postulado) {
            $sql = "select postu.ofertaLaboralId,postu.institucionId,usr.usuario,emp.`empresaRazon`,ofer.`ofertaLaboralCargo` from postulaciones postu 
            inner join ofertaslaborales ofer on ofer.`ofertaLaboralId` = postu.`ofertaLaboralId`
            inner join empresas emp on emp.`empresaId` = ofer.`empresaId`
            left join instituciones insti on insti.`institucionId` = postu.`institucionId`
            left join usuarios usr on usr.usuarioId = insti.`usuarioId`
            where postu.`postulacionesId` = '$postulado'";
            $result = $this->db->query($sql);
            $postulaInfo = $result->result();
            if (isset($postulaInfo[0]->institucionId) && ($result->num_rows() > 0)) {
                //Es una institucion ID por eso se agrega a la tabla puente de las postulaciones
                $sql = "insert into preseleccioninstituciones(ofertaLaboralId,institucionId) values('{$postulaInfo[0]->ofertaLaboralId}','{$postulaInfo[0]->institucionId}') ";
                $tmp = "La empresa {$postulaInfo[0]->empresaRazon} le ha preseleccionado para cubrir la oferta laboral {$postulaInfo[0]->ofertaLaboralCargo} ";
                /* tempVarchar1 -> email de la institucion
                 * tempVarchar2 -> contenido */
                $sql1 = "insert into temporal(transaccion,`tempVarchar1`,`tempVarchar2`) values('$transaccion','{$postulaInfo[0]->usuario}','$tmp')";
                $this->db->query($sql1);
            } else {
                $sql = "select emp.empresaRazon,sol.solServyAseNombre,usr.usuario from postulaciones postu
                        inner join solservyase sol on sol.solServyAseId = postu.solServyAseId
                        inner join empresas emp on emp.empresaId = sol.empresaId
                        inner join instituciones insti on insti.institucionId = postu.institucionId
                        inner join usuarios usr on usr.usuarioId = insti.usuarioId
                        where postu.`postulacionesId` = '$postulado' ";
                $result = $this->db->query($sql);
                if ($result->num_rows() > 0) {
                    $result = $result->result();
                    $tmp = "La empresa {$result[0]->empresaRazon} le ha preseleccionado para el servicios {$result[0]->solServyAseNombre} ";
                    /* tempVarchar1 -> email de la institucion
                     * tempVarchar2 -> contenido */
                    $sql = "insert into temporal(transaccion,`tempVarchar1`,`tempVarchar2`) values('$transaccion','{$result[0]->usuario}','$tmp')";
                    $this->db->query($sql);
                }
                $sql = "update postulaciones set postulacionPreseleccion = 'Si', postulacionFechaPreseleccion = now() where postulacionesId = '$postulado'";
            }
            $this->db->query($sql);
        }
        $this->db->trans_complete();
        return "1";
    }

//fin public function seleccionar($oferta, $postulados) {

    public function noContratar($oferta, $postulados, $causa) {
        $this->db->trans_start(); //inicia la transaccion
        foreach ($postulados as $postulado) {
            /* Consulta todas postulaciones para identificar cuales fueron a traves de una institucion */
            $sql = "select postu.ofertaLaboralId,postu.institucionId,usr.usuario,emp.`empresaRazon`,ofer.`ofertaLaboralCargo` from postulaciones postu 
            inner join ofertaslaborales ofer on ofer.`ofertaLaboralId` = postu.`ofertaLaboralId`
            inner join empresas emp on emp.`empresaId` = ofer.`empresaId`
            left join instituciones insti on insti.`institucionId` = postu.`institucionId`
            left join usuarios usr on usr.usuarioId = insti.`usuarioId`
            where postu.`postulacionesId` = '$postulado' ";
            $postulaInfo = $this->db->query($sql)->result();
            if (isset($postulaInfo[0]->institucionId)) {
                //Es una institucion recorre la preseleccion de instituciones para despues recorrer todas las postulaciones que realizo dicha institucion y reversarlas
                $sql = "update preseleccioninstituciones prese
                    inner join postulaciones postu on postu.`ofertaLaboralId` = prese.`ofertaLaboralId` and postu.`institucionId` = prese.`institucionId`
                    set postu.`postulacionEstado` = 'R',postu.`postulacionFechaPreseleccion` = now(),postu.`postulacionMotivoNO` = 'Cancelan postulación institución'
                    where prese.`ofertaLaboralId` = '$oferta' and prese.`institucionId` = '{$postulaInfo[0]->institucionId}' and prese.`preseInstEstado` = 'A'";
                $this->db->query($sql);
                //Actualiza el estado de la preseleccion de la institucion
                $sql = "update preseleccioninstituciones set `preseInstEstado` = 'R',preseCausaNo = '$causa' where `institucionId` = '{$postulaInfo[0]->institucionId}' and `ofertaLaboralId` = '$oferta' and `preseInstEstado` = 'A'";
            } else {
                $sql = "update postulaciones set postulacionEstado = 'R',postulacionMotivoNO = '$causa', postulacionFechaPreseleccion = now(),postulacionPreseleccion = 'No' where postulacionesId = '$postulado'";
            }
            $this->db->query($sql);
        }
        $this->db->trans_complete();
        return "1";
    }

//fin public function noContratar($oferta, $postulados, $causa) {
}

?>
